package cn.com.bo.util.io;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;  
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

  
public class Image2Binary  
{  
	private static Logger log = LoggerFactory.getLogger(Image2Binary.class);
	
	public static byte[] toByteArray(InputStream in) throws IOException {
		
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        byte[] buffer=new byte[1024*4];
        int n=0;
        while ( (n=in.read(buffer)) !=-1) {
            out.write(buffer,0,n);
        }
        return out.toByteArray();
	}
	
	/**
	 * 网络文件转换为byte二进制
	* @Title: toByteArray
	* @Description: TODO(这里用一句话描述这个方法的作用)
	* @param @param url
	* @param @return
	* @param @throws IOException    设定文件
	* @return byte[]    返回类型
	* @throws
	 */
	public static byte[] toByteArray(String urlStr) throws IOException {
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		DataInputStream in = new DataInputStream(conn.getInputStream());
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        byte[] buffer=new byte[1024*4];
        int n=0;
        while ( (n=in.read(buffer)) !=-1) {
            out.write(buffer,0,n);
        }
        return out.toByteArray();
	}
	
	/**
	 * @throws IOException 
	 * @throws MalformedURLException 
	 * 网络文件转换为本地文件
	* @Title: toByteArray
	* @Description: TODO(这里用一句话描述这个方法的作用)
	* @param @param url
	* @param @return
	* @param @throws IOException    设定文件
	* @return byte[]    返回类型
	* @throws
	 */
	public static void toBDFile(String urlStr, String bdUrl) throws IOException,UnknownHostException{
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		DataInputStream in = new DataInputStream(conn.getInputStream());
        byte[] data=toByteArray(in);
        in.close();
        FileOutputStream out=new FileOutputStream(bdUrl);
        out.write(data);
        out.close();
	}
	
	/**
	 * 直接获取网络文件的md5值
	 * @param urlStr
	 * @return
	 */
	public static String getMd5ByUrl(String urlStr){
		String md5 = null;
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			DataInputStream in = new DataInputStream(conn.getInputStream());
			md5 = DigestUtils.md5Hex(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}    
		return md5;
	}
	
	/**
	 * 获取网络文件的输入流
	 * @param urlStr
	 * @return
	 */
	public static InputStream getInputStreamByUrl(String urlStr){
		DataInputStream in = null;
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			in = new DataInputStream(conn.getInputStream());
		} catch (IOException e) {
			log.error("url转换输入流失败,错误信息{}",e.getMessage());
		}    
		return in;
	}
	

    public static void main(String[] args)  
    {  
//    	try {
//			toBDFile("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1496324940814&di=1d70e0de447be6547c372718b9b30ff6&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2015%2F204%2F22%2FYMG9CAUWUM15.jpg","E://a.jpg");
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
    	String a = getMd5ByUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1496324940814&di=1d70e0de447be6547c372718b9b30ff6&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2015%2F204%2F22%2FYMG9CAUWUM15.jpg");
    	System.out.println(a);
    }  
}  